
// CLEARLY OBVIOUS

/*
 *  ColorDetection.h
 *
 *  Created by Ívar Björn Hilmarsson on 2.5.2009.
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
 *
 */
#include <iostream>
#include <fstream>

#include <string>
#include <vector>
#include <map>
#include <ctime>

// #include "OpenCV/cv.h"
// #include "OpenCV/highgui.h"
#include <cv.h>
#include <highgui.h>

// Gera virkt til að fá glugga og útprentum í terminal
#define	DEBUG

#ifdef DEBUG
/* Define nokkur special dót */
#define 	WINDSRC "Source Myndin"
#define		WINDDST "Result Myndin"
#endif

// Clearly obvious
#define  ESC 27

using namespace std;

class ColorDetection {
	struct coordinate
	{
		unsigned int x, y;
		void * data;
	};
	
	struct lineBlob
	{
		unsigned int min, max;
		unsigned int blobId;
		
		bool attached;
	};
	
	struct blob
	{
		//unsigned int blobId;
		coordinate min, max;
		
		coordinate center;
	};
	
public:
	// Smiður og eyðir
	ColorDetection();
	~ColorDetection();
	
	// Fall sem prófar alla eiginleika klasanns
	void		prufa();
	// Aðal fallið sem keyrir tölvusjónina
	bool		start();
	
	void		grasBurt();
	double		targetDistance;
	double		targetRelativeBearing;
	int			targetPipeID;
	
private:
	void		histo(IplImage* dst_img);
	
	// Finnum blob í mynd
	bool		detectBlobs(IplImage* frame, IplImage* finalFrame);
	// Leitum af lit og notum Hue Saturn Value gildi í mynd
	void		detectHSV(IplImage* frame, IplImage* HSVFrame);
	// Hvert á að stefna eftir því hvar rörið er í mynd
	double		direction();
	// Könnum hvaða rör við fundum 
	void		identifyPipe(IplImage* mynd, int breidd);
	
	bool		greenHSV(IplImage* frame, IplImage* HSVFrame);

	bool		whiteHSV( IplImage* frame, IplImage* HSVFrame );
	bool		detectBlobsWhite(IplImage* frame, IplImage* finalFrame);
	
	// Myndir og Myndavéla breytur
	IplImage*	source;
	IplImage*	dest;
	IplImage*	workingCopy;
	IplImage*	imgCopy;
	CvCapture*	capture;
	
	// Stafur sem geymir hvaða takka var ýtt á
	char		c;
	// Breytur fyrir stefnu fallið (direction())
	int			gildiX;
	int			gildiY;
	int			midX;
	int			midY;
	
};













